package cn.snowheart

/**
 * 注解的使用
 * 使用注释时，需要至少设置所有没有默认值的成员。
 *
 * @author liuwanxiang
 * @version 2019/05/31
 */
class AnnotationExample {

}

/**
 * String 作为注解参数的类型
 */
@interface StringAnnotation {
    String value() default "Default Value"
}

@StringAnnotation("My Value")
class StringAnnotationExample {
}

/**
 * 枚举值 作为注解参数的类型
 */
enum Week {
    Monday, Tuesday, Wednesday, Thursday, Friday, Saturday, Sunday
}

@interface EnumAnnotation {
    Week value() default Week.Monday
}

/**
 * 关闭注释参数
 * FIXME:
 */
@interface OnlyIf {
    Class value()
}

class OnlyIfExample {
    @OnlyIf({ version == 6 })
    void version6() {
        println 'Version is v6.0.0'
    }

    @OnlyIf({ version == 7 })
    void version7() {
        println 'Version is v7.0.0'
    }
}

/**
 * 元注解，注解功能叠加
 */
@OnlyIf(String.class)
@EnumAnnotation(value = Week.Friday)
@StringAnnotation
@interface MetaAnnotation {

}

@OnlyIf(String.class)
@EnumAnnotation(value = Week.Friday)
@StringAnnotation
class MetaAnnotationExample1 {

}

@MetaAnnotation
class MetaAnnotationExample2 {

}